package com.atguigu.gmall.realtime.app.func;

import com.atguigu.gmall.realtime.utils.KeywordUtil;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;

/**
 * @author Felix
 * @date 2023/3/17
 * 自定义UDTF函数
 * 继承TableFunction的意义：标记当前类是一个函数类，可以注册到表执行环境中
 * eval:函数被调用的时候，底层执行的方法，可以重载，在调用的时候，会根据参数选择合适的方法
 */
@FunctionHint(output = @DataTypeHint("ROW<word STRING>"))
public class KeywordUDTF extends TableFunction<Row> {

    public void eval(String text) {
        for (String keyword : KeywordUtil.analyze(text)) {
            // use collect(...) to emit a row
            collect(Row.of(keyword));
        }
    }
}
